const db = require('../db/index')

// 密码加密
const bcrypt = require('bcryptjs')

// 生成token
const jwt = require('jsonwebtoken')
const config = require('../config')

exports.regUser = (req, res) => {
  const userInfo = req.body
  console.log(req.body)
  // 检测是否为空
  if (!userInfo.username || !userInfo.password) {
    return res.send({status: 1, message: '用户名或密码不能为空!'})
  }
  // 检测是否占用
  const sql = `select * from ev_users where username = ?`
  db.query(sql, [userInfo.username], (err, results) => {
    if (err) {
      return res.send({status: 1, message: err.message})
    }
    if (results.length > 0) {
      return res.send({status: 1, message: '用户名被占用，请更换其他用户名!'})
    }
    // 可用 继续~密码加密，插入新用户
    userInfo.password = bcrypt.hashSync(userInfo.password, 10)
    const sql = 'insert into ev_users set ?'
    db.query(sql, { username: userInfo.username, password: userInfo.password },
      (err, results) => {
      // 执行 SQL 语句失败
      if (err) return res.send({ status: 1, message: err.message }) // SQL 语句执行成功，但影响行数不为 1
      if (results.affectedRows !== 1) {
      return res.send({ status: 1, message: '注册用户失败，请稍后再试!' }) }
      // 注册成功
      res.send({ status: 0, message: '注册成功!' }) })
  })
}

exports.login = (req, res) => {
  const userInfo = req.body
  const sql = 'select * from ev_users where username = ?'
  db.query(sql, userInfo.username, (err, results) => {
    if (err) return res.cc(err)
    if (results.length !== 1) return res.cc('登录失败')
    // 判断密码是否和数据库中密码一致
    const compareResult = bcrypt.compareSync(userInfo.password, results[0].password)
    if (!compareResult) return res.cc('登录失败')
    // 登陆成功 生成token
    const user = { ...results[0], password: '', user_pic: '' } // 剔除密码和头像信息
    const tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: '10h'
    })
    res.send({
      status: 0,
      message: '登录成功!',
      // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀 
      token: 'Bearer ' + tokenStr,
    })
  })
}

// CommonJs另一种导出
// module.exports = {
//   regUser,
//   login
// }
